package com.ruoyi.framework.mybatisplus.strategy.strategies;

import com.baomidou.mybatisplus.core.conditions.AbstractWrapper;
import com.ruoyi.framework.mybatisplus.OperateSymbol;
import com.ruoyi.framework.mybatisplus.strategy.AbstractQueryStrategy;

import java.lang.reflect.Field;

/**
 * 左模糊查询策略实现类
 * 用于处理左模糊（LIKE 'xxx%'）查询条件
 * 字段名需要以"LikeLeft"结尾才会匹配此策略
 * 
 * @author xuzhen97
 */
public class LikeLeftStrategy extends AbstractQueryStrategy {
    
    /**
     * 构造函数
     * 设置操作符为左模糊（LIKE_LEFT）
     */
    public LikeLeftStrategy() {
        super(OperateSymbol.LIKE_LEFT);
    }

    /**
     * 应用查询条件
     * 将字段值作为左模糊条件添加到查询包装器中
     * 例如：如果字段值为"test"，则生成条件 LIKE 'test%'
     * 
     * @param prefix 字段前缀
     * @param obj 查询对象
     * @param key 字段名
     * @param field 字段对象
     * @param wrapper 查询包装器
     */
    @Override
    public void apply(String prefix, Object obj, String key, Field field, AbstractWrapper wrapper) {
        String fieldName = getFieldName(key, field);
        Object value = getValue(obj, field);
        if (isValidValue(value)) {
            wrapper.likeLeft(prefix + fieldName, value);
        }
    }
} 